SkyFeedのFeed Builderで使用できる各Blockについて
1.Inputブロック
フィードの元となるPostの読み込み元を指定する
1.1 Entire Network
指定した期間の全Postを読み込む
ブロックの処理時間を参考に、時間がかかりすぎる場合は調整するとよい
https://scrapbox.io/files/64a8f650ae7f7f001b948742.png
1.2 Tags
指定した期間の特定のタグが含まれるPostを読み込む
Tagsに取得したいタグをコンマ区切りで指定する
ハッシュ(#)は不要
本文中のハッシュタグ(インライン)と、Postに指定されたタグ(アウトライン)ともに対応
(2024/03/20時点で公式アプリではPost指定のタグは未対応)
https://scrapbox.io/files/651cdb737b62b8001cb34a86.png
1.3 Single User
特定のユーザーのPostを読み込む
Select yourselfを選択すると自分のDIDが指定される IncludeでPost・リプライ・リポストを読み込むか指定する
With Countsにチェックを入れるとReply/Like/Repost数も読み込む
後のフィルタリングで使用しない場合はチェックを外すと処理が少なくてすむ
https://scrapbox.io/files/6527667b0dd74e001b8e48ba.png
v0.6.1にてユーザーのページからDIDがコピーできるようになった https://scrapbox.io/files/64acb1505801cf001c1fb5ca.png
1.4 List
リストに登録されたユーザーのPostを読み込む
Your Listsを選択すると自分が作成したリストを呼び出せる
List URIにリストのURIを指定する
v0.9.0からat://で始まるURIでなくても、公式のURL(https: //bsky .app/profile/(anyhandle)/lists/(rkey)を貼り付ければ自動で変換してくれるようになった
自分のモデレーションリストを指定した場合は当然対象のPostはミュート・ブロックされるので、リストのページでUnsubscribeしておくこと
ただしリスト外へのリプライを除外できないため、Twitterのリストと同等にはならない
https://scrapbox.io/files/65fa5c4286d24b0025d55ee5.png
1.5 Feed
カスタムフィードのPostを読み込む
注釈にあるように個人化されたフィード(自身のいいねが見えるフィードなど)とbsky.app公式のフィードには未対応
良さそうなフィードからちょっと自分向けに除外ワードなどを設定したいときに便利
https://scrapbox.io/files/64a8f9ff46f5a0001bf62ffc.png
1.6 Single Post
特定のPostを読み込む
SinglePostだけで構成すればToggetterのようなPostまとめを作ることも可能
URIの書式:at://投稿者のDID(did:plc:???)/app.bsky.feed.post/PostのID(URLの最後の13文字のアルファベットの羅列)
https://scrapbox.io/files/64bc8f73d2b878001cb25aa1.png
このInputブロックはその時点のフィードの先頭に追加されるため、Sortブロックで並び替えたあとに追加することで、Postをピン留めするような形式にできる
ただし先頭のPostが変わらないため、クライアントによっては先頭をみて更新されていないと判断される(更新された通知が来ない)可能性があるので注意
https://scrapbox.io/files/64c276af4a9fcb001ba2b9ac.png
1.7 Labels
ラベル付きのPostを読み込む(グローバル・セルフ・サードパーティーラベラー含む)
https://scrapbox.io/files/65fa78dcee504a00253015c7.png
Add Labelからラベルを指定する
https://scrapbox.io/files/65fa65032dbdb4002465e116.png
Labeler DIDにラベリングをしたアカウントのDIDを指定する セルフラベル(投稿時に設定できるラベル)の場合は"self"と指定する
Labelにラベルを指定する(実際にPostに指定されている文字列)
公式・セルフ共通のラベル例
sexual:Suggestive、きわどい、性的表現(Klearsky)
nudity:Nudity、ヌード、裸体表現(Klearsky)
porn:Porn、ポルノ、性的(TOKIMEKI)
公式のラベル例(以下の日本語説明は機械翻訳)
gore(旧)graphic-media(新):流血、ゴア表現(Klearsky)
sexual-figurative:Sexually Suggestive (Cartoon)、性的なものを暗示する (漫画)
self-harm:Self-Harm、自傷
intolerant:Intolerance、不寛容
threat:Threats、脅威
rude:Rude、失礼
spam:Spam、スパム
https://scrapbox.io/files/65fefe4d8266290025b95f0f.png
!hide:Moderator Hide(モデレーターによる非表示)
!warn:Moderator Warn(モデレーターによる警告)
公式のラベル例(以前のドキュメントにあったもののうち2024/03/24時点で確認されたもの) corpse:Corpse、死体
intolerant-gender:Gender Intolerance、ジェンダー不寛容
icon-intolerant:Intolerant Iconography、不寛容な図像
spoiler:ネタバレ(TOKIMEKI、Klearsky)
code:JSONEditorのコピペ用.json
"labels": [
"did:plc:ar7c4by46qjdydhdevvrndac/sexual",
"did:plc:ar7c4by46qjdydhdevvrndac/nudity",
"did:plc:ar7c4by46qjdydhdevvrndac/porn",
"did:plc:ar7c4by46qjdydhdevvrndac/gore",
"did:plc:ar7c4by46qjdydhdevvrndac/graphic-media",
"self/sexual",
"self/nudity",
"self/porn"
]
code:Bluesky Moderation Serviceのすべてのラベル.json
"labels": [
"did:plc:ar7c4by46qjdydhdevvrndac/porn",
"did:plc:ar7c4by46qjdydhdevvrndac/sexual",
"did:plc:ar7c4by46qjdydhdevvrndac/nudity",
"did:plc:ar7c4by46qjdydhdevvrndac/sexual-figurative",
"did:plc:ar7c4by46qjdydhdevvrndac/graphic-media",
"did:plc:ar7c4by46qjdydhdevvrndac/self-harm",
"did:plc:ar7c4by46qjdydhdevvrndac/sensitive",
"did:plc:ar7c4by46qjdydhdevvrndac/extremist",
"did:plc:ar7c4by46qjdydhdevvrndac/intolerant",
"did:plc:ar7c4by46qjdydhdevvrndac/threat",
"did:plc:ar7c4by46qjdydhdevvrndac/rude",
"did:plc:ar7c4by46qjdydhdevvrndac/illicit",
"did:plc:ar7c4by46qjdydhdevvrndac/security",
"did:plc:ar7c4by46qjdydhdevvrndac/unsafe-link",
"did:plc:ar7c4by46qjdydhdevvrndac/impersonation",
"did:plc:ar7c4by46qjdydhdevvrndac/misinformation",
"did:plc:ar7c4by46qjdydhdevvrndac/scam",
"did:plc:ar7c4by46qjdydhdevvrndac/engagement-farming",
"did:plc:ar7c4by46qjdydhdevvrndac/spam",
"did:plc:ar7c4by46qjdydhdevvrndac/rumor",
"did:plc:ar7c4by46qjdydhdevvrndac/misleading",
"did:plc:ar7c4by46qjdydhdevvrndac/inauthentic"
]
2.Removeブロック
特定のPostをフィードから削除する
2.1 Item
指定した種別のPostを削除する
is Repostに引用Postは該当しない様子
has (no) labelsはModerationのContent Filteringに使用されているNSFWなどのラベリングのこと
削除なので、ラベルがつけられていないPostのフィードにしたい場合は「has labels(ラベルがついているPostを削除)」にする必要がある
Postにつけられたラベルが対象のため、(公式のモデレーション等)後で付与されたものは除外されない場合がある
個々に指定が必要になるがRemove Labelsを使用することでより削除できそう
https://scrapbox.io/files/64bc8d0df8b7a8001bb1f50f.png
2.2 Labels
指定したラベル付きのPostを削除する
セルフラベル以外は投稿と同時にラベルが付くわけではないため、タイミングによっては削除される前に閲覧できてしまう可能性あり
https://scrapbox.io/files/65fa7a349b1d140026e76066.png
2.3 Image Count
画像の添付数が指定した条件でないPostを削除する
削除なので、画像が1枚以上添付されたPostのフィードにしたい場合は「Image Count equals 0(画像数0を削除)」にする必要がある
https://scrapbox.io/files/64a8fd93bed8a7001b056bc3.png
2.4 Like Count
いいね数が指定した閾値でないPostを削除する
削除なので、12いいね以上のフィードにしたい場合は「Like Count < 12(12いいね未満を削除)」にする必要がある
https://scrapbox.io/files/64a8fd05393ba9001cf93ba9.png
2.5 Reply Count
返信のPost数が指定した条件でないPostを削除する
削除なので、返信されているPostのフィードにしたい場合は「Reply Count < 1(返信1未満を削除)」にする必要がある
https://scrapbox.io/files/64b32f198803b90021bdff7b.png
2.6 Repost Count
Repost数が指定した条件でないPostを削除する
削除なので、100RP以上されているPostのフィードにしたい場合は「Repost Count < 100(100RP未満を削除)」にする必要がある
https://scrapbox.io/files/64b32f8082e3d7001c7635ec.png
2.7 Embed
埋め込みがある/ないPostを削除する
is None:埋め込まれていないPostを削除=埋め込まれているPostに絞り込み
is Post:Postが埋め込まれているPost(≒引用Post)を削除
is Feed:カスタムフィードが埋め込まれているPostを削除
削除なので、カスタムフィードのPostのフィードにしたい場合はRemoveブロックを2つ追加して「is None」と「is Post」にする必要がある
https://scrapbox.io/files/652767f1e903f2001cc5de49.png
2.8 Duplicates
重複しているPostを削除する
複数のInputブロックを設定した際に有用?
https://scrapbox.io/files/64b3374a87107b001ba95f44.png
2.9 List of Users
ミュートリストに登録されているユーザーのPostを削除する
Your Listsを選択すると自分が作成したミュートリストを呼び出せる
List URIにミュートリストのURIを指定する
at://で始まるURIでなくても、公式のURL(https: //bsky .app/profile/(anyhandle)/lists/(rkey)を貼り付ければ自動で変換してくれる
https://scrapbox.io/files/64b33040267337001c52571e.png
2.10 Language
言語が指定した条件でないPostを削除する
削除なので、日本語のPostのみのフィードにしたい場合は「Language ≠ Japanese(日本語以外を削除)」にする必要がある
クライアントで指定した言語に沿っているため、本文が日本語でも、言語が指定されていないPostが漏れる場合がある
https://scrapbox.io/files/64a8fed05278ae001b2ea9bc.png
3.RegExブロック
Invertにチェックを入れると該当するPostを除外する
Case Sensitiveにチェックを入れるとアルファベットの大文字小文字を区別する
Targetで検索対象を指定する
Post Test:通常通りPostの文章
Image Alt Text:添付されている画像のALT(代替説明文)
Link:リンクのURL
https://scrapbox.io/files/64b3e4813ba798001b19c36d.png
v0.9.0からPostのマッチした箇所がハイライトされるようになった(Link内も展開されてハイライトされる)
https://scrapbox.io/files/653bc4dbfab706001b460094.png
v0.9.9からALTテキスト含め対象としていた場合、ALTテキストが該当すると画像に枠がつくようになった
https://scrapbox.io/files/65a4015b3b8f9d0024bc00a9.png
4.Replaceブロック
該当Postを関連するPostに置き換える、置き換える対象がない場合はそのまま
Parent:親Post(リプライ元)
Root:根Post(リプライツリーの大元のPost)
Record:レコード(引用元)
https://scrapbox.io/files/65883e9b377f190024d122a1.png
例:以下のようなPostのツリーがあったとすると
https://scrapbox.io/files/658842d0a589c70024a4804c.png
検索対象のPostそのまま
https://scrapbox.io/files/658842f345b1ee0023d7cbaa.png
ParentPostを指定
https://scrapbox.io/files/6588431fcb5008002405c0fc.png
RootPostを指定
https://scrapbox.io/files/65884346bb8d010027ad278b.png
Recordを指定
https://scrapbox.io/files/6588436cb70d0800255ec3cb.png
5.Sortブロック
Postを並び替える
Creation Date:投稿日時(昇順・降順)
Like Count:いいね数(昇順・降順)
Repost Count:リポスト数(昇順・降順)
Reply Count:返信数(昇順・降順)
Random:ランダム
https://scrapbox.io/files/64a8ff70d9e420001b0f3176.png
6.Limitブロック
Postの件数を制限する
Top100を抽出して再度並び替えなどに有用?
https://scrapbox.io/files/653bc3feab6348001b58e16d.png
7.Stash & Popブロック
Postを退避・復元する
Stashブロックの手前までのPostをいったん退避($から始まるランダム文字列の変数?へ)
Stash Popブロックで待避していたPostを追加しなおす
複数のInputブロックから別のフィルタリングを行って統合するような場合に有用?
同じPostが追加される場合はRemoveブロックのDuplicateを使用すると被りがなくなる
https://scrapbox.io/files/64b3326f9a5437001b538cad.png
8.Remember Postsブロック
Postを記憶する
上記Stashブロックに近いが、実際に公開したフィードで本ブロックがあった場合に、Postを(タイトル横のkeyの名前で)記録しておき、EntireNetworkの最大期間(7日間)を過ぎたPostがあった場合に追加する
記録したPostを追加するので、検索設定等を変更しても適用されない(7日以前の投稿を検索できる訳ではない)
プレビュー時にも記録が行われるため、検索設定を変更している途中で誤って全Postを拾ってしまうと全Postを記録してしまうことがあるので注意
そのため、変更前にいったん削除して、変更後に再度追加するなどしたほうが良い(再追加してもkeyが変わらなければ復元される)
万が一誤って記録してしまった場合は、Switch to JSON Editorで直接keyを書き換えるとリセットできるが、すでに存在するkeyを指定してしまった場合などの動作は不明
以下、ブロック説明の訳
重要 必ずお読みください
このブロックが動作するためにはフィードを公開する必要があります
このブロックは常にフィードの最後から2番目(最後のSortブロックの手前)に配置する必要があります
現在の記録は10,000件を上限としていますが、近日中に増やします!
使い方:このブロックはある時点を通過したすべての投稿を記憶し、サポートされている最大期間(7日間)を過ぎたあとでも、フィードに追加し続けるよう保ちます
https://scrapbox.io/files/65883a35cc221c0023c2e065.png
Feed Builderの更新履歴
First version
直接は更新されていないが、ユーザーのDIDをコピーできるようになった
RemoveブロックにReply Count・Repost Count・Duplicate・List of Usersが追加
RegExブロックにTarget(Post Text, Image Alt Text)が追加
Stash & Popブロックが追加
2023-07-16 (v0.7.0)
RegExブロックのTarget(Post Text, Image Alt Text)が択一式から複数選択式に
2023-07-23 (v0.7.3)
InputブロックにSingle Postが追加
InputブロックのSingle UserにInclude(Post/Replies/Reposts複数選択式)が追加
またSingle UserのPostは1ヶ月まで遡るようになったとのこと
RemoveブロックのItemにhas labels/has no labelsが追加
2023-08-25 (v0.7.5)
ブロックの数が32個までに制限
InputブロックのSingle UserのPostが過去全てが対象になったとのこと
2023/10/04 (v0.8.1)
InputブロックにTagsが追加
RemoveブロックにEmbedが追加
RegExブロックが最大24行まで大きくなるように
InputブロックのSingle UserにWith Countsオプションが追加
公開したカスタムフィードがFeed Builderから消えてしまった場合に再読み込みで自動的に復元するように
RegExの検索結果にマッチした箇所がハイライトされるように
InputブロックのListにリストのURL(https:// ~)を貼り付けても自動でat://のURIに変換してくれるように
Limitブロックの追加
Remember Postsブロックの追加
Replaceブロックの追加
RegExの検索対象にALTテキストを含め複数指定していた場合、ALTテキストがマッチすると画像に枠がつくように
InputブロックにLabelsが追加
RemoveブロックにLabelsが追加